library(here)
library(dplyr)
library(ggplot2)
load(here("puerto_aviles.RData")) # Esto recupera el objeto con su mismo nombre
print(ls()) # Verifica que el objeto ha sido cargado correctamente)[1] "puerto_aviles"
José Ramón Cuesta
April 7, 2025
Se trata de un post para practicar R y tratar de sacar información (a modo personal) de como funciona la operativa del puerto de Avilés. En este caso vamos a ver la relación entre el tonelaje de registro bruto (GT) y el tonelaje de la carga, así como con las dimensiones de los buques que han pasado por el puerto de Avilés en el año 2024.
Cargamos la librería tidyverse para poder trabajar con los datos.
library(here)
library(dplyr)
library(ggplot2)
load(here("puerto_aviles.RData")) # Esto recupera el objeto con su mismo nombre
print(ls()) # Verifica que el objeto ha sido cargado correctamente)[1] "puerto_aviles"
Examinemos primero con un histograma la distribución de GT, eslora y tonelaje de los buques que han pasado por el puerto de Avilés en 2024. Comprobando los datos de tonelaje, decido quitar los dos valores más altos, porque parecen mal introducidos al ser extremadamente altos para el tipo de buque que es. Filtremos por tanto para valores inferiores a 70000T.
Podemos diferenciar el de los buques que embarcan, desembarcan y hacen transbordo de mercancía.
Podemos comenzar haciendo un análisis de relación entre el valor de GT y la eslora del buque. Para ello vamos a crear un gráfico de dispersión.
puerto_aviles %>%
filter(`Fecha Entrada` >= "2024-01-01" & `Fecha Entrada` <= "2024-12-31") %>%
filter(Tonelaje < 70000) %>%
ggplot(aes(x = GT, y = Eslora)) +
geom_point() +
labs(title = "Relación entre el GT y la eslora del buque",
x = "GT",
y = "Eslora (m)") +
theme_minimal()
Se trata de una relación logarítmica, or lo que podemos aplicar la escala logarítmica al eje Y (Eslora).
puerto_aviles %>%
filter(
`Fecha Entrada` >= as.Date("2024-01-01"),
`Fecha Entrada` <= as.Date("2024-12-31"),
Tonelaje < 70000
) %>%
filter(!is.na(GT), !is.na(Eslora)) %>%
ggplot(aes(x = GT, y = Eslora)) +
geom_point(alpha = 0.6, color = "steelblue") +
scale_x_log10() + # Aplica la escala logarítmica al eje Y
labs(
title = "Relación entre el GT y la eslora del buque",
x = "GT",
y = "Eslora (m) (Escala Logarítmica)"
) +
theme_minimal()
Debemos de tener en cuenta que hay buques que han traido, dos mercancias, por lo que para hacer este cálculo tendriamos que sumar el tonelaje de las dos mercancias. En uno de los post anteriores habíamos encontrado incluso buques que han traido dos mercancias y que posteriormente cargaron una o incluso dos mercancias.
Vamos a tratar de hacer los claculos de manera simple dividiendolos en dos:
Buques que han descargado y buques que han cargado.
Vamos a agrupar los buques que han descargado dos veces, para sumar los tonelajes de esas dos descargas, de modo que obtenemos el tonelaje total que traía el buque.
pa_desembarque <- puerto_aviles %>%
filter(`Fecha Entrada` >= "2024-01-01" & `Fecha Entrada` <= "2024-12-31") %>%
filter(Tonelaje < 70000) %>%
filter(Operación == "Desembarque")
pa_desembarque_suma <- pa_desembarque %>%
group_by(across(-c(At, N, Mercancia, Tonelaje))) %>%
summarise(Tonelaje = sum(Tonelaje, na.rm = TRUE), .groups = "drop") Observando los datos, hay una entrada que se repite y que parece que es un error, consta como que la misma mercancia (concentrado de zinc) ha sido descargada en dos muelles distintos del puerto, por lo que eliminamos esa fila:
De este modo podemos ver si mejora la relación entre el GT y el tonelaje de la carga.
pa_desembarque_suma <- pa_desembarque_suma %>%
mutate(Fila = row_number())
pa_desembarque_suma %>%
ggplot(aes(x = GT, y = Tonelaje)) +
geom_point() +
geom_text(aes(label = Fila), vjust = -0.5, size = 3) +
labs(title = "Relación entre GT y Tonelaje (con número de fila)",
x = "GT",
y = "Tonelaje (T)") +
theme_minimal()
La gráfica muestra que muchos barcos con un valor alto de GT venían por las razones que fuese con poca carga, por lo que esta no es una manera correcta de ver la relación entre el tonelaje de carga y el GT. Solo en el caso de que los buques viniesen con valores de carga cercanos a su límite veriamos como la relación entre el tonelaje de carga y el GT mejoraría.
Podemos realizar el mismo análisis para los buques que han embarcado mercancia, teniendo en cuenta también los casos de los buques que han cargado dos mercancias, para hacer en ese caso la suma de los tonelajes de las dos mercancias.
Hay 535 buques, por lo que vamos a ver los que pudiesen haber cargado dos o más mercancias:
Al agrupar se queda en 521 registros. Veamos si en el caso de los embarques se ajustan más los valores de GT con los de Tonelaje:
pa_embarque_suma <- pa_embarque_suma %>%
mutate(Fila = row_number())
pa_embarque_suma %>%
ggplot(aes(x = GT, y = Tonelaje)) +
geom_point() +
geom_text(aes(label = Fila), vjust = -0.5, size = 3) +
labs(title = "Relación entre GT y Tonelaje (con número de fila)",
x = "GT",
y = "Tonelaje (T)") +
theme_minimal()
Ocurre algo similar y vemos como en el caso de un buque (posición 82) de 37000 GT cargó 6000 T de brea en sacos. No obstante vemos como en estas gráficas se ve como muchos de los buques van con mucha carga pero aparentemente ninguno excede un cierto límite de carga, por lo que no parece que haya un problema de sobrecarga en los buques.
Hay otro tipo de operación que es la de Transbordo, y podemos comprobar la relación entre GT y tonelaje para este tipo de operación.
puerto_aviles %>%
filter(`Fecha Entrada` >= "2024-01-01" & `Fecha Entrada` <= "2024-12-31") %>%
filter(Tonelaje < 70000) %>%
filter(Operación == "Trasbordo") %>%
ggplot(aes(x = GT, y = Tonelaje)) +
geom_point(alpha = 0.6, color = "steelblue") +
labs(title = "Relación entre GT y Tonelaje (Transbordo)",
x = "GT",
y = "Tonelaje (T)") +
theme_minimal()
En el caso de los transbordos, hay menos operaciones, pero se observa la mayor relación entre GT y el Tonelaje, ya que los buques parecen ir con valores de carga más acordes a su valor de GT.